package com.sali.b_design_pattern.g_singleton_pattern.lesson_destroy_singleton.a_reflect.safe.enum_method;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/**
 * @description:
 * @author: zhang hang
 * @date: 2023/3/19 14:47.
 * @version: 1.0
 */
public class Test {

    public static void main(String[] args) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
        // 拿到类对象
        Class<EnumSingleton2> enumSingleton2Class = EnumSingleton2.class;
        // 通过返回获取构造函数
        Constructor<EnumSingleton2> declaredConstructor = enumSingleton2Class.getDeclaredConstructor(null);
        // 设定允许通过反射访问的私有构造函数
        declaredConstructor.setAccessible(true);

        EnumSingleton2 enumSingleton1 = declaredConstructor.newInstance();
        EnumSingleton2 enumSingleton2 = declaredConstructor.newInstance();

        System.out.println(enumSingleton1 == enumSingleton2);
        // 问：为啥使用返回枚举获取的时候，爆出NoSuchMethodException？
        // 答：因为枚举的底层其实是一个类，并且继承Enum类。它根本就没有无参构造函数。
    }

}
